www.gusucode.com > matlab神经网络原理与实例精解 本书源文件 > 第13章 神经网络应用实例/基于概率神经网络的柴油机故障诊断/diagnose.m
% diagnose.m % 柴油机故障诊断 %% 清空工作空间 clear,clc close all %% 定义训练样本和测试样本 % 故障1 pro1 = [1.97,9.5332,1.534,16.7413,12.741,8.3052; 1.234,9.8209,1.531,18.3907,13.988,9.1336]'; % 故障2 pro2 = [0.7682,9.5489,1.497,14.7612,11.497,7.68; 0.7053,9.5317,1.508,14.3161,11.094,7.3552]'; % 故障3 pro3 = [0.8116,8.1302,1.482,14.3171,11.1105,7.4967; 0.816,9.0388,1.497,15.0079,11.6242,7.7604]'; % 故障4 pro4 = [1.4311,8.9071,1.521,15.746,12.0088,7.8909; 1.4136,8.6747,1.53,15.3114,11.6297,7.5984]'; % 故障5 pro5 = [1.167,8.3504,1.51,12.8119,9.8258,6.506; 1.3392,9.0865,1.493,15.0798,11.6764,7.8209]'; % 正常运转 normal = [1.1803,10.4502,1.513,20.0887,15.465,10.2193; 1.2016,12.4476,1.555,20.6162,15.755,10.1285]'; % 训练样本 trainx = [pro1, pro2, pro3, pro4, pro5, normal]; % 训练样本的标签 trlab = 1:6; trlab = repmat(trlab, 2, 1); trlab = trlab(:)'; %% 样本的归一化,s为归一化设置 [x0,s] = mapminmax(trainx); %% 创建概率神经网络 tic; spread = 1; net = newpnn(x0, ind2vec(trlab), spread); toc %% 测试 % 测试样本 testx = [0.7854,8.7568,1.4915,14.4547,11.1971,7.5071; 1.1833,11.8189,1.5481,20.2626,15.5814,10.0646; 0.661,8.8735,1.508,13.598,10.5171,6.9744; 1.3111,7.9501,1.4915,14.9174,10.7511,7.7127; 1.2394,9.6018,1.5366,18.219,13.851,9.0142; 1.2448,8.3654,1.5413,15.2558,11.5643,7.503]'; % 测试样本标签(正确类别) testlab = [3,6,2,5,1,4]; % 测试样本归一化 xx = mapminmax('apply',testx, s); % 将测试样本输入模型 s = sim(net,xx); % 将向量形式的分类结果表示为标量 res = vec2ind(s); %% 显示结果 strr = cell(1,6); for i=1:6 if res(i) == testlab(i) strr{i} = '正确'; else strr{i} = '错误'; end end diagnose_ = {'第一缸喷油压力过大','第一缸喷油压力过小', '第一缸喷油器针阀磨损',... '油路堵塞', '供油提前角提前 ','正常'}; fprintf('诊断结果:\n'); fprintf(' 样本序号 实际类别 判断类别 正/误 故障类型 \n'); for i =1:6 fprintf(' %d %d %d %s %s\n',... i, testlab(i), res(i), strr{i}, diagnose_{res(i)}); end